1 : <?php
2 : /*--------------------------------------------------------------------------+
3 : This file is part of eStudy.
4 : admin/index.php
5 : - Modulgruppe: File Manager
6 : - Beschreibung: Neuer, revolutionaerer File Manager
7 : - Version: 0.1, 09/09/04
8 : - Autor(en): Thorsten Buss <admin@drstone.de>,
9 : Michael Plefka <freAk0r@gmx.net>
10 : +---------------------------------------------------------------------------+
11 : This program is free software; you can redistribute it and/or
12 : modify it under the terms of the GNU General Public License
13 : as published by the Free Software Foundation; either version 2
14 : of the License, or any later version.
15 : +---------------------------------------------------------------------------+
16 : This program is distributed in the hope that it will be useful,
17 : but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : GNU General Public License for more details.
20 : You should have received a copy of the GNU General Public License
21 : along with this program; if not, write to the Free Software
22 : Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 : +--------------------------------------------------------------------------*/
24 :
25 1 : if ( !defined("PATH_TO_ROOT") ) {
26 0 : define( "PATH_TO_ROOT", "../../" );
27 0 : }
28 :
29 : /**
30 : * File Manager
31 : * @package eStudy.Ressourcen
32 : * @version 0.2, 20/09/04
33 : * @author Thorsten Buss <admin@drstone.de>
34 : * @author Michael Plefka <freAk0r@gmx.net>
35 : */
36 : /** Einbinden des Output Utilities */
37 1 : require_once ("class.output.inc.php");
38 1 : require_once ("class.email.inc.php");
39 : /** Einbinden der Datum/Zeit Funktionen */
40 1 : require_once ("class.dateselection.inc.php");
41 : /** Einbinden des Formual Generators */
42 1 : require_once ("class.formular.inc.php");
43 1 : require_once ("class.roleartefacts.inc.php");
44 1 : require_once ("class.teamartefacts.inc.php");
45 : /** Die Spider-Klasse der Suchmaschine einbinden */
46 1 : require_once ("class.spider.inc.php");
47 : /**
48 : * Generiert Formular für Upload, Prüft Dateigröße und -typ
49 : * @package eStudy.Ressourcen
50 : * @version 0.2, 20/09/04
51 : * @author Thorsten Buss <admin@drstone.de>
52 : * @author Michael Plefka <freAk0r@gmx.net>
53 : */
54 1 : class Insert {
55 : /**
56 : * Die maximale Größe für hochgeladene Dateien.
57 : * @access private
58 : * @private integer
59 : */
60 : private $maxFileSize;
61 : /**
62 : * Verbotene Dateiendungen
63 : * @access private
64 : * @private array
65 : */
66 : private $forbiddenFileExtensions;
67 : /**
68 : * Rolle des aktuellen Benutzers, falls eine eingenommen wird.
69 : * @access private
70 : * @private object
71 : */
72 : private $role = null;
73 : /**
74 : * Team des Benutzers
75 : * @access private
76 : * @private object
77 : */
78 : private $team = null;
79 :
80 : /**
81 : * Konstruktor.
82 : * @access public
83 : */
84 : public function __construct() {
85 0 : global $settings;
86 0 : if (is_numeric($settings['filemanager_max_filesize'])) $this->maxFileSize = $settings['filemanager_max_filesize'];
87 0 : $this->forbiddenFileExtensions = $settings['filemanager_forbidden_extensions'];
88 0 : if (isset($_SESSION["roleID"])) {
89 0 : $this->role = new Role($_SESSION["roleID"]);
90 0 : }
91 0 : if (isset($_SESSION["teamID"])) {
92 0 : $this->team = new Team($_SESSION["teamID"]);
93 0 : }
94 0 : }
95 : /**
96 : * Generiert Formular für Insert
97 : * @access public
98 : * @return void
99 : */
100 : public function showForm($file_upload = false, $copyFile = null) {
101 0 : global $db, $EZSQL_ERROR;
102 : // Initialisierung
103 0 : $MaxFileSize = $this->maxFileSize;
104 0 : $ForbiddenFileExtensions = $this->forbiddenFileExtensions;
105 0 : $time = time();
106 0 : $sql_add = "";
107 0 : $heute = getdate();
108 0 : $course = $_SESSION['course'];
109 0 : $form = new Formular();
110 : // INITIALISIERUNG von Kalender Anzeige
111 : // DateSelection Objekt erzeugen und das heutige (start-) Datum einstellen
112 0 : $calendar = new DateSelection($heute['mday'], $heute['mon'], $heute['year'], $heute['hours'], $heute['minutes']);
113 : //Javascript deaktivieren
114 0 : $calendar->autoUpdate = false;
115 : //Name des Formulars einstellen
116 0 : $calendar->formName = "insert";
117 : //Die Ausgabestrings löschen (keine Bezeichner vor den Auswahlfeldern)
118 0 : $calendar->clearStrings();
119 :
120 : // URL ins Feld einfügen und Radio Button vorselektieren, sofern übergeben
121 0 : if(isset($_GET['url'])) {
122 0 : $actionChecked = 'link';
123 0 : $linkUrl = $_GET['url'];
124 0 : }
125 : else {
126 0 : $linkUrl = '';
127 0 : $actionChecked = '';
128 : }
129 :
130 : // Link Name ins Feld einfügen, sofern übergeben
131 0 : if(isset($_GET['name']))
132 0 : $linkName = $_GET['name'];
133 : else
134 0 : $linkName = '';
135 :
136 : // BEGIN von Formular erstellen
137 : // Init
138 0 : $form->setFormHead("insert", "", "post", "multipart/form-data", "onsubmit=\"".(!$file_upload ? "if (document.getElementById('link_ID').checked == false && document.getElementById('folder_ID').checked == false".(($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) || isset($_SESSION["assistent"]) ? " && document.getElementById('ROOT_ID').checked == false" : "") .") { alert('Bitte wählen Sie, ob Sie einen Link oder Ordner erstellen wollen!'); return false; } ":
139 0 : "") ."if (document.getElementById('folder').value == ''".(!$file_upload && (($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) || isset($_SESSION["assistent"])) ? " && document.getElementById('ROOT_ID').checked == false" : "") .") { alert('Bitte wählen Sie einen Zielordner!'); return false; }\"");
140 0 : $form->setTemplate("<table width='100%'>", "<tr valign='top'><td class='tableCell' width='50%'>", "<td class='tableCell' width='50%'>"); // Setzt die UmgebungsTags
141 0 : $form->setButtons(1, "Abschicken"); //Setzt die Buttons
142 0 : if (isset($this->role)) {
143 0 : $form->addRawCode("<tr><td class='message' colspan='2'>Sie nehmen zur Zeit die Rolle <strong>".Data::toHTML($this->role->getName($_SESSION["gender"]), false) ."</strong> ein.<br />Wenn Sie ".($file_upload ? "eine Datei hochladen, wird diese" : "einen Ordner oder Link erstellen, wird dieser") ." unter Ihrem Rollennamen veröffentlicht.</td></tr>");
144 0 : }
145 : // TrennZeile
146 0 : $form->addRawCode("<tr><td class='tableHead' colspan='2'>Benötigte Einstellungen</td></tr>"); // Fuegt eine Ueberschriftszeile ein
147 : // Wenn eine Datei hochgeladen werden soll
148 0 : if ($file_upload) {
149 0 : $form->addInput("hidden", "type", "", 1, "file");
150 0 : $form->addInput("hidden", "MAX_FILE_SIZE", "", 1, $MaxFileSize*1024*1024);
151 :
152 : // MultiUpload: Titel fuer jede einzelne Upload-Moeglichkeit
153 0 : $form->addRawCode("</table><div id='uploads'><table width='100%'><tr valign='top'>
154 0 : <td class='tableHead' colspan='2'><div style='text-align:center;'>Dateiinformationen für 1. Datei</div></td></tr>");
155 :
156 0 : $name = (!is_null($copyFile)) ? $copyFile->getName() : "";
157 0 : $form->addInput("text", "name[]", "Bitte geben Sie einen aussagekräftigen Namen für die Datei ein:<br/><span class='text10'>(max. 40 Zeichen)</span>", 50, $name, 40);
158 : // Beschreibung fuer DateiName auswahlen wird konstruiert (mit erlaubter Endung und max Groesse)
159 0 : if ( !is_null( $copyFile ) ) {
160 0 : $form->addInput("hidden", "copyFile", "", 1, $copyFile->getID());
161 0 : $form->addRawCode("<tr><td>Datei kopieren</td><td>".$copyFile->getOrigFileName()."</td></tr>");
162 0 : } else {
163 0 : $string = "Bitte wählen Sie eine Datei aus:<br/>";
164 0 : $string.= "<span class='text10'>";
165 0 : if ($MaxFileSize) $string.= "max. ".$MaxFileSize." MB";
166 0 : if ($MaxFileSize && $ForbiddenFileExtensions) $string.= ", ";
167 0 : if ($ForbiddenFileExtensions) {
168 0 : $string.= "keine ";
169 0 : if (is_array($ForbiddenFileExtensions)) {
170 0 : foreach($ForbiddenFileExtensions as $value) $string.= ".".$value." ";
171 0 : } else $string.= ".".$ForbiddenFileExtensions." Dateien";
172 0 : }
173 0 : $string.= "</span>";
174 0 : $form->addInput("file", "userfile[]", $string, 34);
175 :
176 0 : $form->addTextArea("comment[]", "Datei-Beschreibung (optional)", 40, 3, "");
177 :
178 : // MultiUpload: Link zu JavaScript-Funktion um zusaetzliches Upload-Formular einzublenden
179 0 : $form->addRawCode("</table></div><table width='100%'><tr valign='top'><td class='tableCell' colspan='2'>
180 : <p style='text-align:right;'>
181 : <script>document.write(\"<a href='#' onclick='one_more_upload(); return false;'>Mehr Dateien Uploaden</a>\");</script>
182 : </p>
183 0 : </td></tr>");
184 : }
185 0 : } else { // Wenn Ordner oder Link erstellt werden soll
186 0 : $folderJS = (($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) ? "document.getElementById('student_write').disabled=false;" : "") ."document.getElementById('userfileLink').style.display='none';"."document.getElementById('userfileFolder').style.display='inline';"."document.getElementById('nameLink').style.display='none';"."document.getElementById('nameFolder').style.display='inline';";
187 0 : $radio = array(array("Link hinzufügen", "link", "onclick=\"".(($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) ? "document.getElementById('student_write').disabled=true;" : "") ."document.getElementById('userfileLink').style.display='inline';"."document.getElementById('userfileFolder').style.display='none';"."document.getElementById('nameLink').style.display='inline';"."document.getElementById('nameFolder').style.display='none';"."document.getElementById('folder').disabled=false\""), array("Ordner erstellen", "folder", "onclick=\"$folderJS"."document.getElementById('folder').disabled=false\""));
188 : // Wenn Admin, Dozent oder Tutor, dann darf er auch einen Root Ordner erstellen
189 0 : if (($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) || isset($_SESSION["assistent"])) {
190 0 : $radio[] = array("Hauptordner erstellen", "ROOT", "onclick=\"$folderJS"."document.getElementById('folder').disabled=true\"");
191 0 : }
192 :
193 0 : $form->addRadio("type", $radio, "Aktion wählen:" . (($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) || isset($_SESSION["assistent"]) ? "" : "<br/><span class='text10'>(Hauptordner sind Ordner auf oberster Ebene)</span>"), $actionChecked);
194 :
195 0 : if (($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) || isset($_SESSION["assistent"])) {
196 0 : $form->addToNextTag("id='student_write'");
197 0 : $form->addInput("checkbox", "student_write", "<strong>Nur für Ordner: </strong> Schreibberechtigung für Studenten");
198 0 : }
199 :
200 0 : $form->addInput("text", "userfile", "<span id='userfileLink'><strong>Link: </strong>Bitte geben Sie eine URL ein.<br/></span><span id='userfileFolder'><strong>Ordner: </strong>Bitte geben Sie einen Ordnernamen ein.<br/><span class='text10'>(OrdnerName => max. 20 Zeichen)</span></span>", 41, $linkUrl);
201 0 : $form->addInput("text", "name", "<span id='nameLink'><strong>Link: </strong>Bitte geben Sie einen Namen für den Link an.<br/></span><span id='nameFolder'><strong>Ordner: </strong>Bitte geben Sie einen erläuternden Namen (Tooltip) für den Ordner an.<br/></span><span class='text10'>(max. 40 Zeichen)</span>", 41, $linkName, 40);
202 : }
203 :
204 : // SQL Abfragen fuer Unterschiedliche UserGruppen => admin und Dozenten duerfen alle Dateien und Verz. sehen
205 0 : if (($_SESSION['usergroup'] == STUDENT || $_SESSION['usergroup'] == ALUMNUS || $_SESSION['usergroup'] == SCHUELER || $_SESSION['usergroup'] == GAST) || isset($_SESSION["assistent"])) $sql_add = "AND (userID='".$_SESSION['userid']."' OR (visible_type='1' AND start_time<'$time' AND end_time>'$time' AND student_write=1) )";
206 0 : elseif ($_SESSION['usergroup'] == SEKRETARIAT) $sql_add = "AND (userID='".$_SESSION['userid']."' OR visible_type<=2)";
207 :
208 : // Zeichnet die OrdnerListe in Baumstruktur
209 0 : $folderArr = NULL;
210 0 : $this->printSubFolder(0, $sql_add, $folderArr, 0, "");
211 0 : $selectedFolder = "";
212 0 : if (isset($_SERVER["HTTP_REFERER"])) {
213 0 : if (preg_match("/activeFolder=([0-9]+)/", $_SERVER["HTTP_REFERER"], $selectedFolder)) {
214 0 : $selectedFolder = $selectedFolder[1];
215 0 : }
216 0 : }
217 0 : if (!is_array($folderArr)) {
218 0 : echo "<table>";
219 0 : if ($_SESSION['usergroup'] == STUDENT || $_SESSION['usergroup'] == ALUMNUS || $_SESSION['usergroup'] == SCHUELER || $_SESSION['usergroup'] == GAST) Output::errorMessage("Sorry, der Dozent oder Admin hat noch keine Ordner angelegt, deshalb können Sie derzeit keine Dateien hochladen.", 1);
220 0 : else Output::errorMessage("Sie müssen erst einen Hauptordner anlegen, bevor Studenten etwas hochladen können!", 1);
221 0 : echo "</table>";
222 0 : $form->addLine(" ", "Noch keine Ordner angelegt.<br/>Es ist nicht möglich etwas zu Erstellen oder Hochzuladen.");
223 0 : } else {
224 0 : $form->addToNextTag("style='width:300;' id='folder'");
225 0 : $form->addSelect("folder", "Bitte geben Sie den Zielordner an".(($_SESSION['usergroup'] == STUDENT || $_SESSION['usergroup'] == ALUMNUS || $_SESSION['usergroup'] == SCHUELER || $_SESSION['usergroup'] == GAST) ? "" : "<br/><span class='text10'>(ist ohne Bedeutung, wenn Sie einen Hauptordner anlegen.)</span>"), $folderArr, count($folderArr) > 10 ? 10 : count($folderArr), false, $selectedFolder);
226 : }
227 0 : if (!$file_upload) {
228 0 : $description = (!is_null($copyFile)) ? $copyFile->getDescription() : "";
229 0 : $form->addTextArea("comment", "Datei-Beschreibung (optional)", 40, 3, $description);
230 0 : }
231 0 : $visibleArr = array(array("Alle", "1"), array("Dozenten und Tutoren", "2"), array("Dozenten", "3"));
232 0 : $form->addSelect("visible", "Wählen Sie hier die Benutzergruppe aus, die Ihren Eintrag sehen darf:", $visibleArr);
233 0 : $form->addButtons();
234 0 : if (($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) || isset($_SESSION["assistent"]) || (($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) || isset($_SESSION["assistent"]) && $course > 0)) {
235 : // Ueberschriftszeile
236 0 : $form->addRawCode("<tr><td class='tableHead' colspan='2'>Optionale Einstellungen</td></tr>");
237 : // Wenn im Foyer dann Alle Anzeigen
238 0 : if ($course == 0) $names = $db->get_results("SELECT ID, Vorname, Nachname FROM user WHERE Usergroup > 1 AND Invisible = 0 AND ID <> ".$_SESSION["userid"]." ORDER BY Nachname, Vorname");
239 0 : else $names = $db->get_results("SELECT ID, Vorname, Nachname, user_course.courseID FROM user, user_course WHERE user.ID=user_course.userID AND user_course.courseID='$course' AND Usergroup > 1 AND userID <> ".$_SESSION["userid"]." ORDER BY Nachname, Vorname");
240 : // Erstellt UserListe fuer Spezielle Sichtbarkeit
241 0 : $COUNT = 0;
242 0 : if (is_array($names)) foreach($names as $name) {
243 0 : $visibleListArr[$COUNT][0] = Data::toHTML($name->Nachname.", ".$name->Vorname, false);
244 0 : $visibleListArr[$COUNT++][1] = $name->ID;
245 0 : }
246 0 : if (!empty($visibleListArr)) $form->addSelect("visibleList", "Hier können Sie zusätzliche Personen auswählen, die Ihren Eintrag sehen dürfen:<br/>(Für Mehrfachselektierung STRG-Taste beim Klicken gedrückt halten.)<br/><strong>(wird ignoriert, wenn als Benutzergruppe "Alle" ausgewählt ist!)</strong>", $visibleListArr, 10, true);
247 0 : }
248 0 : if (($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) || isset($_SESSION["assistent"])) {
249 0 : $form->addMarker();
250 : // Email-Benachrichtigungsfunktion
251 0 : $form->addInput("checkbox", "email", "Benachrichtigung an alle <strong>Mitglieder</strong> per Email?", 0, 1);
252 0 : $form->addInput("checkbox", "teacherEMail", "Benachrichtigung an alle <strong>Dozenten</strong> per Email?", 0, 1);
253 0 : $form->addButtons();
254 0 : echo $form->getForm(0);
255 : // ************* kalender plugin **************************************
256 :
257 : ?>
258 : <tr>
259 0 : <td class='tableCell'>Für welche Zeit sichtbar?<br/><span class='text10'>(wenn Sie nichts auswählen ist der Eintrag immer sichtbar)</span></td>
260 : <td class='tableCell'>Anzeigebeginn Datum/Zeit:<br/>
261 0 : <?php
262 : //falls $_POST - Variablen vorhanden sind, auf das entsprechende Datum einstellen
263 0 : if (isset($_POST['openDate_day'])) {
264 0 : $calendar->setDate($_POST['openDate_day'], $_POST['openDate_month'], $_POST['openDate_year']);
265 0 : $calendar->setTime($_POST['openDate_hour'], $_POST['openDate_minute']);
266 0 : }
267 : //die Datums Auswahlfelder ausgeben
268 0 : $calendar->printCalender("openDate", "dateExt");
269 0 : $calendar->printCalender("openDate", "time");
270 : ?>
271 : <br/><br/>Anzeigeende Datum/Zeit:<br/>
272 0 : <?php
273 : //falls $_POST - Variablen vorhanden sind, auf das entsprechende Datum einstellen
274 0 : if (isset($_POST['closeDate_day'])) {
275 0 : $calendar->setDate($_POST['closeDate_day'], $_POST['closeDate_month'], $_POST['closeDate_year']);
276 0 : $calendar->setTime($_POST['closeDate_hour'], $_POST['closeDate_minute']);
277 0 : }
278 0 : $calendar->printCalender("closeDate", "dateExt");
279 0 : $calendar->printCalender("closeDate", "time");
280 0 : echo " </td>\n</tr>\n";
281 : // ************* kalender plugin **************************************
282 0 : echo $form->getForm(1);
283 0 : } else {
284 0 : echo $form->getForm();
285 : }
286 0 : }
287 : /**
288 : * erstellt eine baumstrukur aller Ordner auf die der User Schreibrechte hat und die er sehen darf
289 : * @access private
290 : * @param ezsql [$fileID] -
291 : * @param string [$sql_add] - SQL zusatz, ist Usergruppenabhaenigig
292 : * @param array [$folderArr] - Array der Ermittelten Folder, ist ein Zeiger der Uebergeben wird
293 : * @param int [$COUNT] - Ist der Array Zaehler von folderArr
294 : * @param string [$layer] - Sind die zeichen vorm Ordnernamen fuer visualisierung der baumstrukur
295 : * @return Anzahl der Elemente im Array
296 : */
297 : public function printSubFolder($fileID, $sql_add, &$folderArr, $COUNT = 0, $layer = "··") {
298 0 : global $db;
299 0 : $folders = $db->get_results("SELECT fileID, link, student_write, userID FROM filelist WHERE parent_object='".$fileID."' AND courseID=".$_SESSION['course']." AND type='folder' $sql_add ORDER BY name");
300 0 : if ($folders) foreach($folders as $folder) {
301 0 : $folderArr[$COUNT][0] = $layer." • ".Data::toHTML($folder->link, false);
302 0 : $folderArr[$COUNT++][1] = $folder->fileID;
303 0 : $COUNT = $this->printSubFolder($folder->fileID, $sql_add, $folderArr, $COUNT, $layer."··");
304 0 : }
305 0 : return $COUNT;
306 : }
307 : /**
308 : * Prüft ob die Dateigröße dem Limit im Config-File entspricht
309 : * @access public
310 : * @param integer $size - Größe der Datei
311 : * @return bool - true wenn Größe OK
312 : */
313 : public function fileSizeOK($size) {
314 0 : if ($this->maxFileSize) {
315 0 : if (($size/1000000) > $this->maxFileSize) return false;
316 0 : if ($size <= 0) return false;
317 0 : }
318 0 : return true;
319 : }
320 : /**
321 : * Prüft ob der Dateityp laut Config-File erlaubt ist
322 : * @access public
323 : * @param string $name - Dateiname
324 : * @return bool - true wenn Dateityp OK
325 : */
326 : public function fileExtOK($name) {
327 0 : if ($this->forbiddenFileExtensions) {
328 0 : $pos = strrpos($name, ".");
329 0 : if ($pos) {
330 0 : $ext = substr($name, $pos+1);
331 0 : if (is_array($this->forbiddenFileExtensions)) {
332 0 : foreach($this->forbiddenFileExtensions as $value) {
333 0 : if (strtolower($ext) == strtolower($value)) return false;
334 0 : }
335 0 : } elseif (strtolower($ext) == strtolower($this->forbiddenFileExtensions)) return false;
336 0 : }
337 0 : }
338 0 : return true;
339 : }
340 : /**
341 : * Versendet die Benachrichtigungsmail für eine neue hochgeladene Datei.
342 : * @access public
343 : * @param integer $fileID - die ID der hochgeladenen Datei
344 : * @param bool $toTeachers - ob die Emails nur an Dozenten geschickt werden sollen
345 : * @return bool
346 : */
347 : public function sendEmail($fileID, $toTeachers = false) {
348 0 : global $db, $settings;
349 0 : if (!is_numeric($fileID)) return false;
350 0 : $file = $db->get_row("SELECT * FROM filelist WHERE fileID='$fileID'");
351 0 : if ($file) {
352 0 : $email = new Email($_SESSION['userid']);
353 0 : if ($toTeachers) {
354 0 : if ($file->courseID == 0) {
355 0 : $query = "SELECT ID FROM user WHERE Usergroup=3";
356 0 : } else {
357 : $query = "SELECT ID
358 : FROM user JOIN user_course ON ID=userID
359 0 : WHERE courseID='".$file->courseID."' AND
360 0 : ((differentUsergroup=0 AND Usergroup=3) OR differentUsergroup=3)";
361 : }
362 0 : } else {
363 0 : if ($file->courseID == 0) {
364 0 : $query = "SELECT ID FROM user WHERE Invisible=0";
365 0 : } else {
366 0 : $query = "SELECT userID FROM user_course WHERE courseID ='".$file->courseID."'";
367 : }
368 : }
369 0 : $users = $db->get_col($query);
370 0 : if ($file->courseID > 0) {
371 0 : $courseName = $db->get_var("SELECT Name FROM courses WHERE ID='".$file->courseID."'");
372 0 : }
373 0 : $user = $db->get_row("SELECT Vorname, Nachname FROM user WHERE ID='".$file->userID."'");
374 0 : $subject = $settings["label"].": Neue Ressource im ".(empty($courseName) ? "Foyer" : "Kurs \"$courseName\"");
375 0 : $message = "Guten Tag,\n\n".$user->Vorname." ".$user->Nachname." hat ".($file->type == "link" ? "einen neuen Link" : ($file->type == "file" ? "eine neue Datei" : "einen neuen Ordner")) ." mit der Bezeichnung\n\n\t".$file->name.(empty($file->description) ? "" : "\n\n\t".$file->description) ."\n\nim ".(empty($courseName) ? "Foyer" : "Kurs \"$courseName\"") ." bereitgestellt".($file->type == "link" ? ":\n\n\t<".$file->link.">" : ".") ."\n\nViele Grüße,\n\nIhr Kursdozent";
376 0 : return $email->sendMessageToUser($subject, $users, $message);
377 : }
378 0 : return false;
379 : }
380 : /**
381 : * Wertet das Formular aus und traegt die Daten in die Datenbank ein
382 : * @access public
383 : * @param array $data - Array mit dem Formulareintraegen
384 : * @return bool - Erfolgswert
385 : */
386 : public function resolveForm($data) {
387 0 : global $db, $EZSQL_ERROR;
388 0 : echo "<table>";
389 : /************************************ FEHLERUEBERPRUEFUNG BEGIN***********************************************/
390 0 : if (!in_array($data["type"], array("folder", "link", "file", "ROOT"))) {
391 0 : $ERROR = "Bitte wählen Sie aus, ob Sie einen Link oder einen Ordner erstellen wollen.";
392 0 : Output::errorMessage($ERROR, 2);
393 0 : echo "</table>";
394 0 : return false;
395 : }
396 0 : if ($data['link'] == "") {
397 0 : switch ($data['type']) {
398 0 : case 'ROOT':
399 0 : case 'folder':
400 0 : $ERROR = "Sie haben keinen Ordnernamen angegeben!";
401 0 : break;
402 :
403 0 : case 'link':
404 0 : $ERROR = "Sie haben keinen Link angegeben!";
405 0 : break;
406 :
407 0 : case 'file':
408 0 : $ERROR = "Sie haben keine Datei ausgewählt!";
409 0 : break;
410 0 : }
411 0 : Output::errorMessage($ERROR, 2);
412 0 : }
413 0 : if ($data['name'] == "") {
414 0 : switch ($data['type']) {
415 0 : case 'ROOT':
416 0 : case 'folder':
417 0 : $ERROR = "Sie haben keinen erläuternden Ordnernamen (Tooltip) angegeben!";
418 0 : break;
419 :
420 0 : case 'link':
421 0 : $ERROR = "Sie haben keinen Namen für den Link angegeben!";
422 0 : break;
423 :
424 0 : case 'file':
425 0 : $ERROR = "Sie haben keinen Namen für die Datei angegeben!";
426 0 : break;
427 0 : }
428 0 : if (!empty($ERROR)) Output::errorMessage($ERROR, 2);
429 0 : }
430 0 : if ($data['parent_object'] == "" && $data['type'] != 'ROOT') {
431 0 : $ERROR = "Sie haben keinen Zielordner ausgewählt!";
432 0 : Output::errorMessage($ERROR, 2);
433 0 : }
434 0 : if ($data['type'] == 'link') {
435 0 : if (!Utilities::validateURL($data['link'])) {
436 0 : $ERROR = "Sie haben eine ungültige URL angegeben!";
437 0 : Output::errorMessage($ERROR, 2);
438 0 : }
439 0 : if (strlen($data['name']) > 40) {
440 0 : $ERROR = "Linkname darf höchstens 40 Zeichen lang sein.";
441 0 : Output::errorMessage($ERROR, 2);
442 0 : }
443 0 : }
444 0 : if ($data['type'] == 'file') {
445 0 : if ($data['orig_filename'] == '' || strlen($data['extension']) > 5 || strlen($data['extension']) < 0) {
446 0 : $ERROR = "Keine Datei ausgewählt oder Dateiendung ungültig! (Länge hinter . 1-4)";
447 0 : Output::errorMessage($ERROR, 2);
448 0 : if ($data['tmpfileTmpName'] != '') unlink($data['tmpfileTmpName']);
449 0 : } elseif (!($this->fileSizeOK($data['size']))) {
450 0 : $ERROR = "Datei ist entweder über der zulässigen Größe, oder sie ist leer!";
451 0 : Output::errorMessage($ERROR, 2);
452 0 : if ($data['tmpfileTmpName'] != '') unlink($data['tmpfileTmpName']);
453 0 : } elseif (!($this->fileExtOK($data['orig_filename']))) {
454 0 : $ERROR = "Dateityp ist nicht erlaubt!";
455 0 : Output::errorMessage($ERROR, 2);
456 0 : if ($data['tmpfileTmpName'] != '') unlink($data['tmpfileTmpName']);
457 0 : }
458 0 : }
459 0 : if ($data['type'] == 'folder') {
460 0 : if (strlen($data['link']) > 20) {
461 0 : $ERROR = "Ordnername darf höchstens 20 Zeichen lang sein.";
462 0 : Output::errorMessage($ERROR, 2);
463 0 : }
464 0 : }
465 : // Wenn bis hierher schon ein Fehler festgestellt wurde bricht er ab
466 0 : if (isset($ERROR)) {
467 0 : echo "</table>";
468 0 : return false;
469 : }
470 : /************************************ FEHLERUEBERPRUEFUNG ENDE ***********************************************/
471 0 : switch ($data['type']) {
472 0 : case 'ROOT': // Hauptordner anlegen
473 0 : $data['type'] = 'folder';
474 0 : $data['parent_object'] = 0;
475 0 : $type = "von Hauptordner";
476 0 : break;
477 :
478 0 : case 'folder': // Unterordner anlegen
479 0 : $type = "von Ordner";
480 0 : break;
481 :
482 0 : case 'link':
483 0 : $type = "von Link";
484 0 : break;
485 :
486 0 : case 'file':
487 0 : $type = "von Datei";
488 0 : break;
489 0 : }
490 : // Baut die SQL Abfrage anhand des Arrays data auf.
491 : // Alle Felder ohne "tmp" werden als FeldName benutzt und ihr Wert in die DB eingetragen
492 0 : $SQL_keys = $SQL_values = '';
493 0 : foreach($data as $key => $value) {
494 0 : if (!strstr($key, "tmp")) {
495 0 : $SQL_keys.= $key.',';
496 0 : $SQL_values.= "'".Data::toMysql($value) ."',";
497 0 : }
498 0 : }
499 : // Ordner existiert schon ??
500 0 : if ($data['type'] == 'folder' && ($db->get_var("SELECT fileID FROM filelist WHERE parent_object='".$data['parent_object']."' AND courseID =".$data['courseID']." AND link='".$data['link']."' LIMIT 1") != "")) {
501 0 : Output::errorMessage("Ein Ordner mit dem selben Namen existiert schon in diesem Ordner.<br/>Wählen Sie bitte einen anderen Namen.", 2);
502 0 : echo "</table>";
503 0 : return false;
504 : }
505 : // Selber Link schon in diesem Ordner vorhanden ??
506 0 : if ($data['type'] == 'link' && $db->get_var("SELECT fileID FROM filelist WHERE parent_object='".$data['parent_object']."' AND courseID=".$_SESSION['course']." AND link='".$data['link']."' LIMIT 1") != "") {
507 0 : Output::errorMessage("Ein Link mit dem selben Namen existiert bereits in diesem Ordner!", 2);
508 0 : echo "</table>";
509 0 : return false;
510 : }
511 0 : $SQL = "INSERT INTO filelist (".substr($SQL_keys, 0, -1) .") VALUES (".substr($SQL_values, 0, -1) .")"; // SQL Abfrage ohne Endene Kommas
512 0 : $errorCount = count($EZSQL_ERROR);
513 0 : $db->query($SQL);
514 0 : $data['fileID'] = $db->insert_id;
515 0 : if (count($EZSQL_ERROR) > $errorCount || $data['fileID'] < 0) {
516 0 : Output::errorMessage("Fehler beim Anlegen ".$type." in der Datenbank!");
517 0 : echo "</table>";
518 0 : return false;
519 0 : } elseif ($data['type'] == 'file') {
520 0 : if (!$this->uploadFile($data)) {
521 0 : $db->query("DELETE FROM filelist WHERE fileID='${data['fileID']}'");
522 0 : $data['fileID'] = "";
523 0 : Output::errorMessage("Aktion nicht erfolgreich durchgeführt!", 2);
524 0 : echo "</table>";
525 0 : return false;
526 : }
527 0 : }
528 0 : if (isset($this->role)) {
529 0 : RoleArtefacts::setRoleForItem(RESSOURCE, $data["fileID"], $_SESSION["roleID"]);
530 0 : }
531 0 : if (isset($this->team)) {
532 0 : TeamArtefacts::setTeamForItem(RESSOURCE, $data["fileID"], $_SESSION["teamID"]);
533 0 : }
534 0 : if ($data['fileID'] && $data['visible_type'] != 1 && isset($data['tmpfileVisibleList'])) {
535 : // Spezielle UserSichtbarkeit in DB eintragen
536 0 : $errorCount = count($EZSQL_ERROR);
537 0 : foreach($data['tmpfileVisibleList'] as $value) {
538 0 : $db->query("INSERT INTO filevisible (fileID,userID) VALUES(".$data['fileID'].",".$value.")");
539 0 : }
540 0 : if (count($EZSQL_ERROR) > $errorCount) {
541 0 : Output::errorMessage("Aktion nicht erfolgreich durchgeführt!", 2);
542 0 : echo "</table>";
543 0 : return false;
544 : }
545 0 : }
546 0 : if ($data['type'] != 'file') {
547 0 : if ($data['tmpemail'] || $data['tmpteacherEMail']) {
548 0 : if ($this->sendEmail($data['fileID'], ($data['tmpteacherEMail'] && !$data['tmpemail']))) Output::echoMessage("Benachrichtigungs-Mails versandt.", 2);
549 0 : else Output::errorMessage("Benachrichtigungs-Mails konnten nicht versandt werden!", 2);
550 0 : }
551 0 : }
552 0 : Output::echoMessage("Aktion wurde erfolgreich durchgeführt!", 2);
553 0 : echo "</table>";
554 0 : unset($_POST);
555 0 : if ($data['type'] == 'file') {
556 : // hochgeladene Datei indizieren
557 0 : $spider = new Spider();
558 0 : $spider->start("add-file", $data['fileID']);
559 0 : }
560 0 : return $data["fileID"];
561 : }
562 : /**
563 : * Laed die Datei mit der fileID $fileID hoch
564 : *
565 : * @param array [$data] Array mit den Formular-Eingaben
566 : * @return boolean Erfolgswert
567 : * @access private
568 : */
569 : private function uploadFile($data) {
570 0 : global $settings;
571 : // Konstruktion des Uploadverzeichnis
572 0 : $uploaddir = PATH_TO_ROOT.$settings["upload_path"].'filemanager/courseID/'.$data['courseID'].'/';
573 : // Verzeichnis anlegen wenn noch nicht vorhanden
574 0 : if (!(is_dir($uploaddir))) Utilities::mkdir_r($uploaddir);
575 0 : $uploadSuccess = false;
576 : // Datei wird hochgeladen
577 0 : if (isset($data['tmpfileTmpName'])) {
578 0 : $uploadSuccess = move_uploaded_file($data['tmpfileTmpName'], $uploaddir.$data['link']);
579 0 : } else if (isset($data['tmpPathToFile'])) {
580 0 : $uploadSuccess = copy( $data['tmpPathToFile'], $uploaddir.$data['link'] );
581 0 : }
582 0 : if ( $uploadSuccess ) {
583 0 : if ($data['tmpemail'] || $data['tmpteacherEMail']) {
584 0 : if ($this->sendEmail($data['fileID'], ($data['tmpteacherEMail'] && !$data['tmpemail']))) Output::echoMessage("Benachrichtigungs-Mails versandt.", 1);
585 0 : else Output::errorMessage("Benachrichtigungs-Mails konnten nicht versandt werden!", 1);
586 0 : }
587 0 : Output::echoMessage("Datei erfolgreich gesendet", 1);
588 0 : return true;
589 : } else {
590 0 : Output::errorMessage("Fehler beim Senden der Datei aufgetreten!", 1);
591 0 : return false;
592 : }
593 : }
594 : }
|